package com.wanji.protocol.api;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToMessageEncoder;

import java.util.List;

public abstract class ByteBufEncoder<T> extends MessageToMessageEncoder<ByteBuf> {
    @Override
    protected void encode(ChannelHandlerContext ctx, ByteBuf msg, List<Object> out) {
        T encodedMessage = toEncodedMessage(ctx, msg);
        if (encodedMessage != null) {
            out.add(encodedMessage);
        }
    }

    /**
     * 将 DeviceMessage 转换为特定格式的消息
     *
     * @param ctx 通道处理器上下文
     * @param msg 待编码的设备消息
     * @return 编码后的消息对象
     */
    protected abstract T toEncodedMessage(ChannelHandlerContext ctx, ByteBuf msg);
}
